package modelos;

import java.util.Calendar;

import persistencia.InformesSRV;

public class AdministradorInformes {

	// ATRIBUTOS
	private static AdministradorInformes instancia = null;
	
	// CONSTRUCTOR
	
	public AdministradorInformes(){}
	
	// Singleton
	public static AdministradorInformes obtenerInstancia()
	{
		if (instancia == null){
			instancia = new AdministradorInformes();
		}
		return instancia;
	}

	// METODOS

	public String getInformeFacturacion(Calendar fechaInicio, Calendar fechaFin) {
		// TODO Auto-generated method stub
		int cantidadFacturas = 0;
		String informeFinal = new String();
		String[][] informe = new InformesSRV().getInformeFacturacion(fechaInicio, fechaFin);
		informeFinal += ("Nro Factura\tFecha\tTotal\tCUIT Cliente\tNro de Presupuesto\n");
		//Recorrer y cargar los datos							
		for (int i = 0 ; i < informe.length; i++){
			for (int j = 0 ; j < informe[i].length; j++){
				informeFinal += (informe[i][j] + "\t");
			}
			informeFinal += ("\n");
			cantidadFacturas++;
		}
		informeFinal += "\nSe contabilizaron un total de " + cantidadFacturas + " facturas";
		
		return informeFinal;
	}

	public float getTotalFacturacion(Calendar fechaInicio, Calendar fechaFin) {
		// TODO Auto-generated method stub
		return new InformesSRV().getTotalFacturacion(fechaInicio, fechaFin);
	}

	public float getTotalFacturacion(Calendar fechaInicio,
			Calendar fechaFin, String cUIT) {
		// TODO Auto-generated method stub
		return new InformesSRV().getTotalFacturacion(fechaInicio, fechaFin, cUIT);
	}

	public String getInformeFacturacion(Calendar fechaInicio,
			Calendar fechaFin, String cUIT) {
		// TODO Auto-generated method stub
		int cantidadFacturas = 0;
		String informeFinal = new String();
		String[][] informe = new InformesSRV().getInformeFacturacion(fechaInicio, fechaFin, cUIT);
		informeFinal += ("Nro Factura\tFecha\tTotal\tNro de Presupuesto\n");
		
		//Recorrer y cargar los datos							
		for (int i = 0 ; i < informe.length; i++){
			for (int j = 0 ; j < informe[i].length; j++){
				informeFinal += (informe[i][j] + "\t");
			}
			informeFinal += ("\n");
			cantidadFacturas++;
		}
		informeFinal += "\nSe contabilizaron un total de " + cantidadFacturas + " facturas";
		return informeFinal;
	}

	public String[][] getInformeTipoServicio(Calendar fechaInicio,
			Calendar fechaFin) {
		// TODO Auto-generated method stub
		return InformesSRV.getInformeTipoServicio(fechaInicio, fechaFin);
	}

	public String[][] getInformeTipoServicioPorcentual(Calendar fechaInicio, Calendar fechaFin) {
		// TODO Auto-generated method stub
		int totalRealizados = getInformeTipoServicioTotalRealizados(fechaInicio, fechaFin);
		String[][] informe = getInformeTipoServicio(fechaInicio, fechaFin);
		for(int i = 0; i < informe.length; i++)
		{
			float porcentaje = (Integer.valueOf(informe[i][1])*100)/totalRealizados;
			informe[i][1] = String.valueOf(porcentaje);
		}
		return informe;
	}

	public int getInformeTipoServicioTotalRealizados(Calendar fechaInicio, Calendar fechaFin) {
		// TODO Auto-generated method stub
		String[][] informeCantidadTipoServicio = InformesSRV.getInformeTipoServicio(fechaInicio, fechaFin);
		int totalRealizados = 0;
		for(int i = 0; i < informeCantidadTipoServicio.length; i++)
			totalRealizados += Integer.valueOf(informeCantidadTipoServicio[i][1]);
		return totalRealizados;
	}

	public String getInformeEstadosPresupuestos(Calendar fechaInicio, Calendar fechaFin) {
		// TODO Auto-generated method stub
		String informeFinal = new String();
		int totalRealizados = 0;
		int cantidadEstados = 0;
		String[][] informe = InformesSRV.getInformeEstadosPresupuesto(fechaInicio, fechaFin);
		
		informeFinal += ("Cantidad\tPorcentaje\tNombre Estado\n");
		for(int i = 0; i < informe.length; i++){
			totalRealizados += Integer.valueOf(informe[i][1]);				
			cantidadEstados++;
		}
		
		for (int i = 0; i < informe.length; i++){
			informeFinal += (informe[i][1] + "\t" + ((Integer.valueOf(informe[i][1])*100)/totalRealizados) + "\t" + informe[i][0] + "\n");
		}

		informeFinal += ("\nSe encontraron " + totalRealizados + " presupuestos en total\n" +
				"Se detectaron " + cantidadEstados + " estados distintos");
		
		return informeFinal;
	}

	public String getInformeFacturacionXMeses(Calendar fechaInicio,
			Calendar fechaFin) {
		// TODO Auto-generated method stub
		String resultado = new String();
		int cantidadPeriodos = 0;
		float montoTotalFacturado = 0;
		String[][] informe = InformesSRV.getInformeFacturacionXMeses(fechaInicio, fechaFin);
		resultado += "Periodo\t\tTotal facturado\n";
		for(int i = 0; i < informe.length; i++){
			for(int j = 0; j < informe[i].length; j++){
				resultado += (informe[i][j] + "\t\t");
			}
			resultado += ("\n");
			cantidadPeriodos++;
			montoTotalFacturado += Float.valueOf(informe[i][1]);
		}
		resultado += ("\n\n");
		resultado += "Cantidad de periodos: " + cantidadPeriodos + "\n";
		resultado += "Total facturado: " + montoTotalFacturado + "\n";
		
		return resultado;
	}
	
}
